package com.ajavaer.framework.im.tencent.request.data;

import com.ajavaer.framework.im.tencent.model.TencentImApplyJoinOption;
import com.ajavaer.framework.im.tencent.model.TencentImGroupType;
import com.fasterxml.jackson.annotation.JsonProperty;

import java.util.List;

/**
 * 创建群组请求数据
 */
public class CreateGroupData implements TencentImRequestData {

    /**
     * 群名称，最长30字节（必填）
     */
    @JsonProperty("Name")
    private String name;
    /**
     * 群组类型：Private/Public/ChatRoom(不支持AVChatRoom和BChatRoom)（必填）
     * <p>
     * 包括 Public（公开群），Private（私密群），ChatRoom（聊天室），AVChatRoom（音视频聊天室），BChatRoom（在线成员广播大群）
     * </p>
     */
    @JsonProperty("Type")
    private TencentImGroupType type;
    /**
     * 群主的 UserId（选填）
     * <p>
     * 自动添加到群成员中。如果不填，群没有群主
     * </p>
     */
    @JsonProperty("Owner_Account")
    private String ownerAccount;
    /**
     * 用户自定义群组 ID（选填）
     */
    @JsonProperty("GroupId")
    private String groupId;
    /**
     * 群简介，最长240字节（选填）
     */
    @JsonProperty("Introduction")
    private String introduction;
    /**
     * 群公告，最长300字节（选填）
     */
    @JsonProperty("Notification")
    private String notification;
    /**
     * 群头像 URL（选填），最长100字节
     */
    @JsonProperty("FaceUrl")
    private String faceUrl;
    /**
     * 最大群成员数量（选填）
     * <p>
     * 缺省时的默认值：私有群是200，公开群是2000，聊天室是10000，音视频聊天室和在线成员广播大群无限制
     * </p>
     */
    @JsonProperty("MaxMemberCount")
    private Integer maxMemberCount;
    /**
     * 申请加群处理方式（选填）
     * <p>
     * 包含 FreeAccess（自由加入），NeedPermission（需要验证），DisableApply（禁止加群），不填默认为 NeedPermission（需要验证）
     * </p>
     */
    @JsonProperty("ApplyJoinOption")
    private TencentImApplyJoinOption applyJoinOption;
    /**
     * 群组维度的自定义字段（选填）
     * <p>
     * 默认情况是没有的，需要开通，详情请参阅 <a href='https://cloud.tencent.com/document/product/269/1502#.E8.87.AA.E5.AE.9A.E4.B9.89.E5.AD.97.E6.AE.B5'>自定义字段</a>
     * </p>
     */
    @JsonProperty("AppDefinedData")
    private List<DefinedData> appDefinedData;
    /**
     * 初始群成员列表，最多500个（选填）
     * <p>
     * 成员信息字段详情请参阅 <a href='https://cloud.tencent.com/document/product/269/1502#.E7.BE.A4.E6.88.90.E5.91.98.E8.B5.84.E6.96.99'>群成员资料</a>
     * </p>
     */
    @JsonProperty("MemberList")
    private List<Member> memberList;

    public String getOwnerAccount() {
        return ownerAccount;
    }

    public void setOwnerAccount(String ownerAccount) {
        this.ownerAccount = ownerAccount;
    }

    public TencentImGroupType getType() {
        return type;
    }

    public void setType(TencentImGroupType type) {
        this.type = type;
    }

    public String getGroupId() {
        return groupId;
    }

    public void setGroupId(String groupId) {
        this.groupId = groupId;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getIntroduction() {
        return introduction;
    }

    public void setIntroduction(String introduction) {
        this.introduction = introduction;
    }

    public String getNotification() {
        return notification;
    }

    public void setNotification(String notification) {
        this.notification = notification;
    }

    public String getFaceUrl() {
        return faceUrl;
    }

    public void setFaceUrl(String faceUrl) {
        this.faceUrl = faceUrl;
    }

    public Integer getMaxMemberCount() {
        return maxMemberCount;
    }

    public void setMaxMemberCount(Integer maxMemberCount) {
        this.maxMemberCount = maxMemberCount;
    }

    public TencentImApplyJoinOption getApplyJoinOption() {
        return applyJoinOption;
    }

    public void setApplyJoinOption(TencentImApplyJoinOption applyJoinOption) {
        this.applyJoinOption = applyJoinOption;
    }

    public List<DefinedData> getAppDefinedData() {
        return appDefinedData;
    }

    public void setAppDefinedData(List<DefinedData> appDefinedData) {
        this.appDefinedData = appDefinedData;
    }

    public List<Member> getMemberList() {
        return memberList;
    }

    public void setMemberList(List<Member> memberList) {
        this.memberList = memberList;
    }
}
